home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / games.arc / SPHERE.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  2.1 KB  |  97 lines

  1. 10  ' ****************************
  2. 20  ' **         SPHERE         **
  3. 30  ' ****************************
  4. 40  '
  5. 50  CLEAR
  6. 60  SCREEN 1
  7. 70  KEY OFF
  8. 80  CLS
  9. 90  LOCATE 7,1
  10. 100  PRINT "(degrees) ...
  11. 110  PRINT
  12. 120  INPUT "Rotation around the Y axis ";H
  13. 130  INPUT "Rotation around the X axis ";P
  14. 140  INPUT "Rotation around the Z axis ";B
  15. 150  INPUT "And how many stripes ";STRIPES
  16. 160  '
  17. 170  'initialize things
  18. 180  DEF FNDTR(DEGREES)=3.14159*DEGREES/180
  19. 190  DEF FNATN2(Y,X) = -ATN(Y/(X-(X=0)))*(X<>0)-1.5708*SGN(Y)                                         *(X=0)+3.14159*(X<0)*((Y>=0)-(Y<0))
  20. 200  OPTION BASE 1
  21. 210  DIM MROT(3,3)
  22. 220  CLS
  23. 230  '
  24. 240  'build the rotation matrix
  25. 250  SH=SIN(FNDTR(-H))
  26. 260  CH=COS(FNDTR(-H))
  27. 270  SP=SIN(FNDTR(P))
  28. 280  CP=COS(FNDTR(P))
  29. 290  SB=SIN(FNDTR(B))
  30. 300  CB=COS(FNDTR(B))
  31. 310  MROT(1,1)=CH*CB+SH*SP*SB
  32. 320  MROT(1,2)=CH*SB-SH*SP*CB
  33. 330  MROT(1,3)=SH*CP
  34. 340  MROT(2,1)=-CP*SB
  35. 350  MROT(2,2)=CP*CB
  36. 360  MROT(2,3)=SP
  37. 370  MROT(3,1)=CH*SP*SB-SH*CB
  38. 380  MROT(3,2)=-SH*SB-CH*SP*CB
  39. 390  MROT(3,3)=CH*CP
  40. 400  '
  41. 410  'stripe lines
  42. 420  FOR PHI = 0 TO 180 STEP 180/STRIPES
  43. 430  CPHI=COS(FNDTR(PHI))
  44. 440  SPHI=SIN(FNDTR(PHI))
  45. 450  XL=0
  46. 460  YL=0
  47. 470  FOR THETA = 0 TO 360 STEP 15
  48. 480  CTHETA=COS(FNDTR(THETA))
  49. 490  STHETA=SIN(FNDTR(THETA))
  50. 500  XS=CTHETA*SPHI
  51. 510  YS=STHETA*SPHI
  52. 520  ZS=CPHI
  53. 530  XR=MROT(1,1)*XS+MROT(2,1)*YS+MROT(3,1)*ZS
  54. 540  YR=MROT(1,2)*XS+MROT(2,2)*YS+MROT(3,2)*ZS
  55. 550  ZR=MROT(1,3)*XS+MROT(2,3)*YS+MROT(3,3)*ZS
  56. 560  XSL=88
  57. 570  XSR=232
  58. 580  YSL=160
  59. 590  YSR=40
  60. 600  XSC=(XR+1)*(XSR-XSL)/2+XSL
  61. 610  YSC=(YR+1)*(YSR-YSL)/2+YSL
  62. 620  IF PHI <> 0 THEN 670
  63. 630  THETA = 360
  64. 640  XPA = XSC
  65. 650  YPA = YSC
  66. 660  ZSGN = SGN(ZR)
  67. 670  IF ZR >= 0 THEN 700
  68. 680  XL = 0
  69. 690  YL = 0
  70. 700  IF XL OR YL THEN LINE(XL,YL)-(XSC,YSC)
  71. 710  XL=XSC
  72. 720  YL=YSC
  73. 730  NEXT THETA,PHI
  74. 740  CIRCLE (160,100),72
  75. 750  IF ZSGN <> -1 THEN 780
  76. 760  XPA = 320 - XPA
  77. 770  YPA = 200 - YPA
  78. 780  ANG=FNATN2(100-YPA,160-XPA)
  79. 790  FOR DIST = 1 TO 199
  80. 800  XPA=XPA+COS(ANG)
  81. 810  YPA=YPA+SIN(ANG)
  82. 820  IF POINT (XPA,YPA) <> 0 THEN 850
  83. 830  CLR = CLR MOD 3 + 1
  84. 840  PAINT (XPA,YPA),CLR,3
  85. 850  NEXT DIST
  86. 860  PAINT(1,1),0,3
  87. 870  BGD=(BGD+1)MOD 16
  88. 880  PLT=(PLT+1)MOD 2
  89. 890  IF BGD=0 AND PLT=0 THEN BGD=1
  90. 900  COLOR BGD,PLT
  91. 910  '
  92. 920  ' One second delay
  93. 930  TM$ = TIME$
  94. 940  WHILE TIME$ = TM$
  95. 950  WEND
  96. 960  GOTO 870
  97.